<?php

class Pay_notifyApp extends MallbaseApp
{
    function Pay_notifyApp()
    {
        parent::__construct();
        $this->my_money_mod =& m('my_money');
		$this->my_moneylog_mod =& m('my_moneylog');
    }	
    function index()
    {
		require_once(ROOT_PATH . "/includes/alipay/alipay.config.php");
		require_once(ROOT_PATH . "/includes/alipay/lib/alipay_notify.class.php");
		//计算得出通知验证结果
		$alipayNotify = new AlipayNotify($aliapy_config);
		$verify_result = $alipayNotify->verifyNotify();
		if($verify_result) //验证成功---
		{		
		  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		  if($_POST['trade_status'] == 'TRADE_FINISHED') {
			  //判断该笔订单是否在商户网站中已经做过处理
				  //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
				  //如果有做过处理，不执行商户的业务程序
			  //开始各种各样的更新----------------为通用函数------------------------
				$this->_alipay_success();
			  //开始各种各样的更新----------------为通用函数------------------------				
		  }
		  else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
  
			  //开始各种各样的更新----------------为通用函数------------------------
				$this->_alipay_success();
			  //开始各种各样的更新----------------为通用函数------------------------				
		  }
	  
		  exit("success");		//请不要修改或删除	  
		  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}else {
			  //验证失败
			  exit("fail");
		}
 
	}
	
	//支付宝支付成功，并开始更新订单等等的一切数据-----
	function _alipay_success()
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		$out_trade_no	= $_POST['out_trade_no'];	//获取订单号
		$trade_no		= $_POST['trade_no'];		//获取支付宝交易号
		$total_fee		= $_POST['total_fee'];		//获取总价格
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       
	if ($out_trade_no && $total_fee>0)//有效订单号和有效金额
    {
	  $my_moneylog_info  = $this->my_moneylog_mod->get("pay_order_sn='{$out_trade_no}' and (leixing='30' or leixing='20')");
	  if ( $total_fee == $my_moneylog_info['money'] ) //返回来的价格是否一致的
	  {
		  $money_sql = "select money from {$this->my_money_mod->table} where user_id='{$my_moneylog_info['user_id']}'";
		  $my_money_row=$this->my_money_mod->getRow($money_sql);
		  switch ($my_moneylog_info['leixing'])
		  {
		   case 30://等于30的时候就是会员充值啦////////////////////////////////////////////////////////
				
				//是否已经更新过了
				if (!$my_moneylog_info['caozuo'])
				{
				  //打款给用户、并更新为支付成功的状态
				  $edit_mymoney=array('money'=>$my_money_row['money']+$total_fee);
				  $this->my_money_mod->edit('user_id='.$my_moneylog_info['user_id'], $edit_mymoney);
				  //更新充值订单状态
				  $edit_mymoneylog=array('caozuo'=>1,'add_time'=>gmtime(),'money_yue'=>$edit_mymoney['money']);
				  $sql_mymoney = "pay_order_sn='{$out_trade_no}' and leixing='30' and caozuo='0' and user_id=".$my_moneylog_info['user_id'];
				  $this->my_moneylog_mod->edit($sql_mymoney,$edit_mymoneylog);
				}
				
		   break;
		   case 20://等于20的时候就是订单支付啦//////////////////////////////////////////////////////

			//是否已经更新过了
			if (!$my_moneylog_info['caozuo'] && $my_moneylog_info['pay_which_order'])
			{
				//取出支付单里的金额和支付订单号
				$order_model=& m('order');
				$conditions="order_id in({$my_moneylog_info['pay_which_order']}) AND status=".ORDER_PENDING." AND buyer_id=".$my_moneylog_info['user_id'];
				$order_info=$order_model->find(array('conditions' => $conditions,'fields'  => 'order_sn,order_amount,status,out_trade_sn',));
					
				if ($order_info)//当有数据的时候开始执行
				{
					foreach ($order_info as $order_info_s)
					{
						$order_total_amount +=  $order_info_s['order_amount'];
					}
					//判断是否为结合余额支付订单------------------////////
					if ($my_moneylog_info['use_amount'] == 1)
					{
						//判断需要从帐户余额扣除的金额数
						$kc_money  = round($order_total_amount - $my_moneylog_info['money'],2);
						if ( $kc_money>0 && round($my_money_row['money'], 2) >= $kc_money )
						{
							//扣除用户的金额、并更新为支付成功的状态
							$order_edit_array=array('money'=>$my_money_row['money']-$kc_money);
							$this->my_money_mod->edit('user_id='.$my_moneylog_info['user_id'], $order_edit_array);
							//添加扣除金额的日志
							$log_text =$my_moneylog_info['user_name'].'余额支付订单'.$kc_money.'元';
							$add_mymoneylog=array(
								'user_id'=>$my_moneylog_info['user_id'],
								'user_name'=>$my_moneylog_info['user_name'],
								'bank_name'=>'yue',//余额支付
								'add_time'=>gmtime(),
								'leixing'=>20, //订单支出	
								'caozuo'=>1, //状态已完成	
								'money'=>$kc_money,
								'money_yue'=>$order_edit_array['money'],//余额
								'log_text'=>$log_text,		
								's_and_z'=>2,//收入1,支出2	
								'pay_order_sn'=> $out_trade_no,//生成支付订单
								'pay_which_order'=> $my_moneylog_info['pay_which_order'],//合并付款的所有订单号									
							);
							$this->my_moneylog_mod->add($add_mymoneylog);	
							//通过检验，更新订单为已付款
							$ebank_type_check = Lang::get('ebank_type');//银行信息
							$order_edit_array=array(
								'status'=> ORDER_ACCEPTED,//已付款，待发货的状态
								'payment_name'  =>$ebank_type_check[$my_moneylog_info['bank_name']],
								'payment_code'  =>$my_moneylog_info['bank_name'],
								'pay_time' =>gmtime(),
								'out_trade_sn'=>$trade_no,
							);
							$order_model->edit($conditions,$order_edit_array);													
							//更新充值订单状态
							$edit_mymoneylog=array('caozuo'=>1,'add_time'=>gmtime(),'money_yue'=>$order_edit_array['money']);
							$this->my_moneylog_mod->edit("pay_order_sn='{$out_trade_no}' and leixing='20' and caozuo='0' and user_id=".$my_moneylog_info['user_id'],$edit_mymoneylog);	
							//多封邮件一起发出去
							$model_member =& m('member');
							foreach ($order_info as $order_info_s)
							{
								//取出卖家邮箱地址
								$seller_email  = $model_member->getOne("select email from {$model_member->table} where user_id='{$order_info_s['seller_id']}'");
								 /* 发送给卖家发货的通知 */
								$seller_mail = get_mail('toseller_online_pay_success_notify', array('order' => $order_info_s));
								$this->_mailto($seller_email, addslashes($seller_mail['subject']), addslashes($seller_mail['message']));
							}										
							
						}else{ //加起来都没办法支付，只能把钱打进帐户里去了
							//打款给用户
							$edit_mymoney=array('money'=>$my_money_row['money']+$total_fee);
							$this->my_money_mod->edit('user_id='.$my_moneylog_info['user_id'], $edit_mymoney);
							//支付订单不成功，只能变更成充值的日志
							$edit_mymoneylog=array('leixing'=>30,'caozuo'=>1,'add_time'=>gmtime(),'s_and_z'=>1,'money_yue'=>$edit_mymoney['money'],
							                       'log_text'=>'支付订单时帐户余额不足,金额充值到帐户');
							$this->my_moneylog_mod->edit("pay_order_sn='{$out_trade_no}' and leixing='20' and caozuo='0' and user_id=".$my_moneylog_info['user_id'],$edit_mymoneylog);	
						}	
						
					}else{	
						
						//判断返回的价格是否与订单的总价一至
						if ($my_moneylog_info['money'] == $order_total_amount)
						{
							//通过检验，更新订单为已付款
							$ebank_type_check = Lang::get('ebank_type');//银行信息
							$order_edit_array=array(
								'status'=> ORDER_ACCEPTED,//已付款，待发货的状态
								'payment_name'  =>$ebank_type_check[$my_moneylog_info['bank_name']],
								'payment_code'  =>$my_moneylog_info['bank_name'],
								'pay_time' =>gmtime(),
								'out_trade_sn'=>$trade_no,
							);
							$order_model->edit($conditions,$order_edit_array);
							//更新充值订单状态
							$edit_mymoneylog=array('caozuo'=>1,'add_time'=>gmtime());
							$sql_moneylog = "pay_order_sn='{$out_trade_no}' and leixing='20' and caozuo='0' and user_id=".$my_moneylog_info['user_id'];
							$this->my_moneylog_mod->edit($sql_moneylog,$edit_mymoneylog);								
						}
						
					}//判断结束------------////
															
				 }	
					
			}
		   break;
		  }			   
	   
	  }
	
	}//有效订单号和有效金额-------------
			
   }	
}
?>